﻿using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Delphi.Mimir.Data.Entities.Raw.Mappings {
    public class RawBalanceSheetMap : EntityTypeConfiguration<RawBalanceSheet> {
        public RawBalanceSheetMap() {
            /******************************************************************
            /* Table
            /*****************************************************************/
            ToTable("raw.eod_balance_sheets");

            /******************************************************************
            /* Primary Key
            /*****************************************************************/
            HasKey(a => a.sbs_id);

            /******************************************************************
            /* Index
            /*****************************************************************/
            // None

            /******************************************************************
            /* Relationships
            /*****************************************************************/
            // None

            /******************************************************************
            /* Properties
            /*****************************************************************/
            Property(a => a.sbs_id)
                .IsRequired()
                .HasColumnName("sbs_id");

            Property(a => a.sbs_sym_cd)
                .IsRequired()
                .IsUnicode(false)
                .HasMaxLength(25)
                .HasColumnName("sbs_sym_cd");

            Property(a => a.sbs_exc_cd)
                .IsRequired()
                .IsUnicode(false)
                .HasMaxLength(25)
                .HasColumnName("sbs_exc_cd");

            Property(a => a.sbs_period)
                .IsRequired()
                .IsUnicode(false)
                .HasMaxLength(25)
                .HasColumnName("sbs_period");

            Property(a => a.sbs_dt)
                .IsRequired()
                .HasColumnName("sbs_dt");
            
            Property(a => a.sbs_ca_cash_and_eqv)
                .IsOptional()
                .HasColumnName("sbs_ca_cash_and_eqv");

            Property(a => a.sbs_ca_st_inv)
                .IsOptional()
                .HasColumnName("sbs_ca_st_inv");

            Property(a => a.sbs_ca_net_recbls)
                .IsOptional()
                .HasColumnName("sbs_ca_net_recbls");

            Property(a => a.sbs_ca_invtry)
                .IsOptional()
                .HasColumnName("sbs_ca_invtry");

            Property(a => a.sbs_ca_other_assts)
                .IsOptional()
                .HasColumnName("sbs_ca_other_assts");

            Property(a => a.sbs_ca_tot)
                .IsOptional()
                .HasColumnName("sbs_ca_tot");

            Property(a => a.sbs_nca_lt_inv)
                .IsOptional()
                .HasColumnName("sbs_nca_lt_inv");

            Property(a => a.sbs_nca_ppe)
                .IsOptional()
                .HasColumnName("sbs_nca_ppe");

            Property(a => a.sbs_nca_goodwill)
                .IsOptional()
                .HasColumnName("sbs_nca_goodwill");

            Property(a => a.sbs_nca_intgbl_assts)
                .IsOptional()
                .HasColumnName("sbs_nca_intgbl_assts");

            Property(a => a.sbs_nca_accum_amort)
                .IsOptional()
                .HasColumnName("sbs_nca_accum_amort");

            Property(a => a.sbs_nca_other_assts)
                .IsOptional()
                .HasColumnName("sbs_nca_other_assts");
            
            Property(a => a.sbs_nca_dfrd_lt_assts_chrg)
                .IsOptional()
                .HasColumnName("sbs_nca_dfrd_lt_assts_chrg");

            Property(a => a.sbs_tot_assts)
                .IsOptional()
                .HasColumnName("sbs_tot_assts");

            Property(a => a.sbs_cl_acct_paybl)
                .IsOptional()
                .HasColumnName("sbs_cl_acct_paybl");

            Property(a => a.sbs_cl_crnt_lt_debt)
                .IsOptional()
                .HasColumnName("sbs_cl_crnt_lt_debt");

            Property(a => a.sbs_cl_other)
                .IsOptional()
                .HasColumnName("sbs_cl_other");

            Property(a => a.sbs_cl_total)
                .IsOptional()
                .HasColumnName("sbs_cl_total");

            Property(a => a.sbs_ncl_lt_debt)
                .IsOptional()
                .HasColumnName("sbs_ncl_lt_debt");

            Property(a => a.sbs_ncl_other_liab)
                .IsOptional()
                .HasColumnName("sbs_ncl_other_liab");

            Property(a => a.sbs_ncl_dfrd_lt_liab_chrg)
                .IsOptional()
                .HasColumnName("sbs_ncl_dfrd_lt_liab_chrg");
            
            Property(a => a.sbs_ncl_min_intr)
                .IsOptional()
                .HasColumnName("sbs_ncl_min_intr");

            Property(a => a.sbs_ncl_neg_goodwill)
                .IsOptional()
                .HasColumnName("sbs_ncl_neg_goodwill");

            Property(a => a.sbs_tot_liab)
                .IsOptional()
                .HasColumnName("sbs_tot_liab");

            Property(a => a.sbs_eq_misc_st_opt_wrnt)
                .IsOptional()
                .HasColumnName("sbs_eq_misc_st_opt_wrnt");

            Property(a => a.sbs_eq_redmbl_prfrd_st)
                .IsOptional()
                .HasColumnName("sbs_eq_redmbl_prfrd_st");

            Property(a => a.sbs_eq_prfrd_st)
                .IsOptional()
                .HasColumnName("sbs_eq_prfrd_st");

            Property(a => a.sbs_eq_comn_st)
                .IsOptional()
                .HasColumnName("sbs_eq_comn_st");

            Property(a => a.sbs_eq_rtnd_earn)
                .IsOptional()
                .HasColumnName("sbs_eq_rtnd_earn");

            Property(a => a.sbs_eq_trsry_st)
                .IsOptional()
                .HasColumnName("sbs_eq_trsry_st");
            
            Property(a => a.sbs_eq_cap_spls)
                .IsOptional()
                .HasColumnName("sbs_eq_cap_spls");

            Property(a => a.sbs_eq_other_eqty)
                .IsOptional()
                .HasColumnName("sbs_eq_other_eqty");

            Property(a => a.sbs_total_eqty)
                .IsOptional()
                .HasColumnName("sbs_total_eqty");

            Property(a => a.sbs_net_tgbl_assts)
                .IsOptional()
                .HasColumnName("sbs_net_tgbl_assts");
        }
    }
}
